package com.copsoftware.procesos.denuncia.dao;

import java.util.List;

import com.copsoftware.db.DAOSession;
import com.copsoftware.entity.DenDenunciaImpl;
import com.copsoftware.procesos.denuncia.beans.DenunciaFlt;
import com.copsoftware.utils.dao.WhereBuilder;

public class DenunciaDAO extends DAOSession{
	
	public DenDenunciaImpl buscarDenuncia(Integer cDenuncia)
	{
		StringBuffer hql = new StringBuffer();
		hql.append("from DenDenunciaImpl where CDenuncia=").append(cDenuncia);
		return (DenDenunciaImpl) getSession().createQuery(hql.toString()).uniqueResult();
	}

	public void guardarDenuncia(DenDenunciaImpl denDenuncia) {

		getSession().saveOrUpdate(denDenuncia);
		getSession().flush();
	}
	
	public void actualizarEstadoDenuncia(Integer idDenuncia,Integer idEstado) {
		StringBuffer sql = new StringBuffer();
		sql.append(" UPDATE DEN_DENUNCIA SET C_ESTADO=").append(idEstado).append(" WHERE C_DENUNCIA=").append(idDenuncia);
		getSession().createSQLQuery(sql.toString()).executeUpdate();
		getSession().flush();
	}
	

	public List buscarDenuncia(DenunciaFlt denunciaFlt) {
		StringBuffer hql = new StringBuffer();
		hql.append("from DenDenunciaImpl d ");
		WhereBuilder where = new WhereBuilder("d",denunciaFlt);
		where.registerMatch("codigo", "CDenuncia");
		where.registerMatch("estado", "CEstado");
		where.registerMatch("CTipoDelito", "CTipoDelito");
		where.registerMatch("CSubTipoDelito", "CSubTipoDelito");
		where.registerMatch("codigoPersona", "CPersonal");		
		where.execute();
		if (where.getParameters()!=null){
			hql.append(" where ");
			hql.append(where.getSql());
			if ((denunciaFlt.getFeRangoFin() != null) && (denunciaFlt.getFeRangoIni() != null))
			{
				hql.append(" and ");
				hql.append("FDenuncia").append(" between ").append(denunciaFlt.getFeRangoIni()).append(" and ").append(denunciaFlt.getFeRangoFin());
			}
			
			
		}
		hql.append(" order by CDenuncia");
		List list = getSession().createQuery(hql.toString()).list();
		return list;
	}
	
	public List buscarDenunciaSinInv(DenunciaFlt denunciaFlt, Integer idInvestigacion) {
		StringBuffer hql = new StringBuffer();
		hql.append("from DenDenunciaImpl d ");
		WhereBuilder where = new WhereBuilder("d",denunciaFlt);
		where.registerMatch("codigo", "CDenuncia");
		where.registerMatch("estado", "CEstado");
		where.registerMatch("CTipoDelito", "CTipoDelito");
		where.registerMatch("CSubTipoDelito", "CSubTipoDelito");
		where.registerMatch("codigoPersona", "CPersonal");		
		where.execute();
		hql.append(" where 1=1 ");
		
		if (where.getParameters()!=null){
			hql.append(" and ");
			hql.append(where.getSql());
			

			
			if ((denunciaFlt.getFeRangoFin() != null) && (denunciaFlt.getFeRangoIni() != null))
			{
				hql.append(" and ");
				hql.append("FDenuncia").append(" between ").append(denunciaFlt.getFeRangoIni()).append(" and ").append(denunciaFlt.getFeRangoFin());
			}
						
		}
		
		if (idInvestigacion != null)
		{
			hql.append(" and ");
			hql.append(" CInvestigacion !=").append(String.valueOf(idInvestigacion));
		}
			
		hql.append(" order by CDenuncia");
		List list = getSession().createQuery(hql.toString()).list();
		return list;
	}
	
	
	public List buscarDenunciaInvestigacion(Integer idInvestigacion) {
		StringBuffer hql = new StringBuffer();
		hql.append("from DenDenunciaImpl d ");
		hql.append(" where ");
		if (idInvestigacion != null)
			hql.append(" CInvestigacion=").append(String.valueOf(idInvestigacion));
		hql.append(" order by CDenuncia");
		List list = getSession().createQuery(hql.toString()).list();
		return list;
	}
	
}
